package com.demo.java.OD51_100.OD52;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【静态代码扫描服务】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145595938
 */
public class OdMain {

    // 计算最小金钱成本
    private static int solveMethod(int m, String myIdsStr, String mySizesStr) {
        // 存储每个文件的扫描次数和文件大小
        Map<Integer, Integer> idCostMap = new HashMap<>();
        Map<Integer, Integer> idSizeMap = new HashMap<>();

        // 将文件ID和大小转换为数组
        String[] ids = myIdsStr.split(" ");
        String[] sizes = mySizesStr.split(" ");

        // 遍历所有文件
        for (int i = 0; i < ids.length; ++i) {
            int id = Integer.parseInt(ids[i]);
            int size = Integer.parseInt(sizes[i]);

            // 更新扫描次数和文件大小
            idCostMap.put(id, idCostMap.getOrDefault(id, 0) + 1);
            idSizeMap.put(id, size);
        }

        int sum = 0;

        // 遍历所有文件ID，计算最小成本
        for (Integer id : idCostMap.keySet()) {
            // 计算当前文件的合并成本
            int total = idCostMap.get(id) * idSizeMap.get(id);

            // 比较单独扫描成本与合并成本，选择较小的
            idCostMap.put(id, Math.min(total, m + idSizeMap.get(id)));

            // 累加所有文件的最小成本
            sum += idCostMap.get(id);
        }

        return sum;
    }

    public static void main(String[] args) {
        // 读取输入
        Scanner s = new Scanner(System.in);
        int m = s.nextInt();  // 扫描一次的成本
        s.nextLine();  // 读取换行符
        String myIdsStr = s.nextLine();  // 文件ID
        String mySizesStr = s.nextLine();  // 文件大小

        // 调用方法计算最小金钱
        int res = solveMethod(m, myIdsStr, mySizesStr);
        System.out.println(res);  // 输出最小金钱
    }
}